/*
 * robot16.cpp
 *
 */

#include <sstream>
#include "../middleware/CommunicationRobot16.h"
#include "../middleware/CommunicationCinta15.h"
#include "../middleware/CommunicationAdpt.h"
#include "../middleware/CommunicationDespacho.h"
#include "../logger/logger.h"

int main(int argv, char **agrv)
{

	CLogger::create("Robot 16");
	CLogger::setLevel(LogLevelEnum::TRACE);

	CLogger::log("Robot 16 started", LogLevelEnum::INFO);

	middleware::CommunicationRobot16 comunicacionRobot16;
	middleware::CommunicationCinta15 comunicacionCinta15;
	middleware::CommunicationAdpt comunicacionAdpt;

	while(true)
	{
		OrdenCompraHeader ordenCompra;
		Producto producto;
	    TipoProducto tipoProducto;
	    middleware::CommunicationRobot16::RemitenteRequest remitente;
		comunicacionRobot16.getPedidoRobot16(ordenCompra,tipoProducto,remitente);

		switch(remitente)
		{
		case middleware::CommunicationRobot16::ROBOT14:
		{
			CLogger::log("Se recibio un request desde la linea de Produccion", LogLevelEnum::TRACE);

			comunicacionCinta15.retirarProducto(producto);
			comunicacionAdpt.insertarProducto(producto);
			break;
		}
		case middleware::CommunicationRobot16::DESPACHO:
		{
			std::stringstream ss;
			CLogger::log("Se recibio un request desde Despacho", LogLevelEnum::TRACE);

			comunicacionAdpt.retirarProducto(tipoProducto,ordenCompra,producto);

			CLogger::log("Se retiro el producto del Adpt", LogLevelEnum::TRACE);

			comunicacionRobot16.entregarProductoDespacho(ordenCompra,producto);

			ss << "Se obtuvo el producto de id:"<< producto.productoId<< " tipo:"<<producto.tipo
			   << " para el cliente:"<< ordenCompra.clientId;
			CLogger::log(ss.str(), LogLevelEnum::TRACE);

			break;
		}
		default:
			CLogger::log("Se recibio request de tipo desconocido", LogLevelEnum::ERROR);
			break;
		}
	}

	return 0;
}
